import Mock from "mockjs";
import config from "../request/config";
// import * as login from "./modules/login";
// import * as personal from "./modules/personal";
// const moduleFiles = require.context("./modules", true, /\.js$/);  这个方法不起作用

// 通过vite中的import方式引入模块
const modules = {};
const moduleFiles = await import.meta.glob("./modules/**/*.js", {
  eager: true,
});
// console.log(moduleFiles);
async function importAllModules() {
  for (const fileName in moduleFiles) {
    const name = fileName
      .replace(/^\.\/modules\//, "") // 移除开头的 ./modules/
      .replace(/\.js$/, "") // 移除结尾的 .js
      .replace(/-(\w)/g, (match, p1) => p1.toUpperCase()) // 将连字符后的字符转为大写，小写驼峰命名
      .replace(/-/g, ""); // 移除剩余的连字符
    modules[name] = moduleFiles[fileName];
  }
  console.log(modules);
}
// 调用函数
importAllModules();
// 通过vite中的import方式引入模块

const { baseURL, timeout } = config;
Mock.setup({ timeout });
//1.开启/关闭所有模块拦截,通过openMock开关设置
//2.开启/关闭单个模块拦截,通过调用mock方法isOpen参数设置
//3.开启/关闭模块中某个请求拦截,通过函数返回对象中的isOpen属性设置
const openMock = true;
// 模拟所有模块
mockAll(modules, openMock);

function mockAll(modules, isOpen = true) {
  for (const k in modules) {
    mock(modules[k], isOpen);
  }
}
//模拟单个模块
// mock(login, openMock)
// 创建mock模拟数据
// @param{*}mod模块
// @param{*}isOpen是否开启?
function mock(mod, isOpen = true) {
  if (isOpen) {
    for (var key in mod) {
      ((res) => {
        if (res.isOpen !== false) {
          let url = baseURL;
          if (!url.endsWith("/")) {
            url = url + "/";
          }
          url = url + res.url;
          Mock.mock(new RegExp(url), res.method, (opts) => {
            opts.data = opts.body ? JSON.parse(opts.body) : null;
            const resData = Mock.mock(
              typeof res.response === "function"
                ? res.response(opts)
                : res.response
            );
            console.log("%cmock 拦截, 请求：", "color:blue", opts);
            console.log("%cmock 拦截, 响应", "color:blue", resData);
            return resData;
          });
        }
      })(mod[key]() || {});
    }
  }
}
